home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 019 / 130color.arc / 130COLOR.ASC next >
Text File  |  1986-06-20  |  3KB  |  89 lines

  1. 100 '130 color graphics by Larry McMillin [PC World, November 1985]
  2. 110 'Derived from LOWRES.BAS [PC World, April 1985]
  3. 120 DEFINT A-Z:KEY OFF:CLS
  4. 130 DIM COLOUR(135,1),ORDER(15),CHOICE(19)
  5. 140 LOCATE 1,1:PRINT "130 Color Demonstration"
  6. 150 LOCATE 5,1,1:PRINT "Now assembling colors..."
  7. 160 '
  8. 170 'Color/Graphics Adapter definitions
  9. 180 MODEREG=&H3D8:COLORREG=&H3D9         'control registers
  10. 190 MODESAVE=&H465:COLORSAVE=&H466       'BIOS saves the regs here
  11. 200 CRTREG=&H3D4:CRTDATA=&H3D5           '6845 CRT controller regs
  12. 210 HIRES=1:VIDEO=8                      'Mode register bits
  13. 220 '
  14. 230 'Create a list of the 136 colors.  This includes 6 colors that are
  15. 240 '50-50 mixtures of primary colors, but excludes foreground/background
  16. 250 'combinations that duplicate background/foreground combinations.
  17. 260 C=0
  18. 270 FOR I=0 TO 255
  19. 280     BG=I\16:FG=I MOD 16:IF FG<BG THEN GOTO 300
  20. 290     COLOUR(C,0)=BG:COLOUR(C,1)=FG:C=C+1
  21. 300 NEXT
  22. 310 '
  23. 320 'Select 19 colors from the list for this demonstration
  24. 330 FOR I=1 TO 19:READ CHOICE(I):NEXT
  25. 340 DATA 1,16,24,17,2,10,39,119,133,89,68,128,81,87,126,58,4,19,20
  26. 350 '
  27. 360 'Build an index to organize the colors in the matrix
  28. 370 FOR I=0 TO 15:READ ORDER(I):NEXT
  29. 380 DATA 0,8,1,9,3,11,2,10,6,14,4,12,5,13,7,15
  30. 390 '
  31. 400 'Set up Color/Graphics Adapter for 80- by 100-block graphics
  32. 410 DEF SEG=0:MODE=0
  33. 420 POKE MODESAVE,MODE:OUT MODEREG,MODE
  34. 430 POKE COLORSAVE,0:OUT COLORREG,0
  35. 440 '
  36. 450 'Load new parameters into 6845 CRT controller
  37. 460 FOR REGISTER=0 TO 11
  38. 470     READ REGDATA
  39. 480     OUT CRTREG,REGISTER:OUT CRTDATA,REGDATA
  40. 490 NEXT
  41. 500 '
  42. 510 'Initial data for 6845 (80 x 100 characters)
  43. 520 DATA 113    : 'register 0 - horizontal total
  44. 530 DATA  80    : 'register 1 - horizontal displayed
  45. 540 DATA  90    : 'register 2 - horizontal sync position
  46. 550 DATA  10    : 'register 3 - horizontal sync width
  47. 560 DATA 127    : 'register 4 - vertical total
  48. 570 DATA   6    : 'register 5 - vertical adjust
  49. 580 DATA 100    : 'register 6 - vertical displayed
  50. 590 DATA 112    : 'register 7 - vertical sync position
  51. 600 DATA   2    : 'register 8 - interlace mode (non-interlaced)
  52. 610 DATA   1    : 'register 9 - maximum scan line address
  53. 620 DATA  32    : 'register 10 - cursor start (disables cursor display)
  54. 630 DATA   0    : 'register 11 - cursor end
  55. 640 '
  56. 650 'Set mode for 80 column color enable
  57. 660 MODE=HIRES+VIDEO
  58. 670 POKE MODESAVE,MODE:OUT MODEREG,MODE
  59. 680 '
  60. 690 'Clear screen; Set all characters to 177, attributes to 0
  61. 700 DEF SEG=&HB800
  62. 710 FOR ADDR=0 TO 16000 STEP 2:POKE ADDR,177:POKE ADDR+1,0:NEXT
  63. 720 '
  64. 730 'Draw a matrix of colors
  65. 740 FOR I=0 TO 31
  66. 750     FOR J=0 TO 63
  67. 760         X=I:Y=J
  68. 770         BG=ORDER(I\2 MOD 16)
  69. 780         FG=ORDER(J\4 MOD 16)
  70. 790         GOSUB 960
  71. 800     NEXT
  72. 810 NEXT
  73. 820 '
  74. 830 'Draw diagonal lines using selected colors
  75. 840 FOR I=0 TO 75
  76. 850     PICK=CHOICE(1+(I\1 MOD 19))
  77. 860     BG=COLOUR(PICK,0):FG=COLOUR(PICK,1)
  78. 870     X=40+I MOD 19:Y=I
  79. 880     GOSUB 960
  80. 890 NEXT
  81. 900 '
  82. 910 'Wait for keypress, restore text mode, end program
  83. 920 WHILE INKEY$="":WEND
  84. 930 SCREEN 2:SCREEN 0,0,0:END
  85. 940 '==================================================
  86. 950 'Subroutine to plot PIXCOL at (x, y)
  87. 960 PIXEL=2*X+(Y*160):PIXELADDR=(PIXEL AND &HFFFE)+1
  88. 970 POKE PIXELADDR,BG*16+FG:RETURN
  89.